The enterprise computing landscape has recently undergone a fundamental shift in storage architectures in which the central-service architecture has given way to distributed storage systems. Distributed storage systems built from commodity computer systems can deliver high performance, availability, and scalability for new data-intensive applications at a fraction of cost compared to monolithic disk arrays. To unlock the full potential of distributed storage systems, data is replicated across multiple instances of the distributed storage system at different geographical locations, thereby increasing availability and reducing network distance from clients.
Replication requests are issued by upstream servers (instances) to downstream servers (instances) in the distributed storage system to create, modify, and/or delete objects in the distributed storage system based on user demand. In implementations where a global load manager identifies and schedules the replication requests, the global load manager manages the load of the downstream servers (e.g., the number of replication requests that are handled by the downstream servers) to ensure that the downstream servers are not overloaded. However, in implementations where a global load manager does not exist, the upstream servers may inadvertently overload the downstream servers.